The newer hooks React added for concurrent rendering, transitions, and external state.
React 18 and 19 added hooks targeting specific gaps the original set didn't cover. useTransition marks a state update as non-urgent, letting React interrupt it in favor of more urgent work like responding to a keystroke — useful when a state update triggers an expensive re-render you don't want to block the UI. useDeferredValue is closely related but works on a value rather than an update, deferring a heavy re-render (like filtering a huge list) while keeping something like a text input immediately responsive. useId generates stable, unique IDs that are safe to use across server and client rendering, specifically to avoid the ID mismatches that would otherwise break SSR hydration.
useSyncExternalStore exists to correctly subscribe a component to state that lives entirely outside React — it's what state management libraries like Redux and Zustand use internally to stay correctly synchronized under React's concurrent rendering, where naive external subscriptions could tear (show inconsistent state mid-render). React 19's use() is the most unusual of the group: it reads a promise or context value directly during render and integrates with Suspense, and unlike every other hook, it can be called conditionally — a deliberate, controlled exception to the Rules of Hooks.
What you'll walk away knowing